package com.ce.pms.system.custservice.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.ce.pms.base.service.impl.PmsBaseServiceImpl;
import com.ce.pms.base.vo.SearchVO;
import com.ce.pms.exception.BusinessException;
import com.ce.pms.system.custservice.dao.IEventRegionDao;
import com.ce.pms.system.custservice.model.EventRegionDO;
import com.ce.pms.system.custservice.service.IEventRegionService;
import com.ce.pms.system.custservice.vo.EventRegionVO;
import com.ce.util.BeanUtil;
import com.ce.util.BlankUtil;
import com.sitechasia.webx.core.support.Page;
import com.sitechasia.webx.core.utils.base.PopulateUtil;

public class EventRegionServiceImpl extends PmsBaseServiceImpl implements
		IEventRegionService {
	/**
	 * 方法描述: 分页查询所有区域设置
	 * @author 胡煦
	 * Create on:2008-7-30
	 * @param pageNo,pageSize,order
	 * @return 返回当前页的查询结果
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Page queryAllEventRegionByPage(SearchVO searchVO){
		Page page = eventRegionDao.queryAllEventRegionByPage(searchVO);
		List<EventRegionDO> eventRegionDOlist = page.getResult();
		List<EventRegionVO> eventRegionVOlist = new ArrayList<EventRegionVO>();
		for(EventRegionDO eventRegionDO : eventRegionDOlist){
			EventRegionVO eventRegionVO = this.assembleD2V(eventRegionDO, null);
			eventRegionVOlist.add(eventRegionVO);
		}
		page.setResult(eventRegionVOlist);
		return page;
	}
	/**
	 * 方法描述: 区域设置列表查询方法
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param name
	 * @return List<EventRegionVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<EventRegionVO> getEventRegionList() {
		Page page = eventRegionDao.getEventRegionList(null);
		List<EventRegionDO> eventRegionDOList = page.getResult();
		List<EventRegionVO> eventRegionVOList = new ArrayList<EventRegionVO>();
		for(EventRegionDO eventRegionDO : eventRegionDOList){
			EventRegionVO eventRegionVO = this.assembleD2V(eventRegionDO, null);
			eventRegionVOList.add(eventRegionVO);
		}
		return eventRegionVOList;
	}
	/**
	 * 方法描述: 根据ID查询VO方法
	 * @author 胡煦
	 * Create on:2008-12-22
	 * @param keyword
	 * @return EventRegionVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public EventRegionVO findEventRegionVOById(Long keyword) {
		if(BlankUtil.isBlank(keyword)){
			return null;
		}
		return this.assembleD2V(eventRegionDao.findById(keyword), null);
	}
	/**
	 * 方法描述: 区域设置增加方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param EventRegionVO
	 * @return EventRegionVO Edit author: Edit on: 修改原因：
	 */
	public EventRegionVO addEventRegion(EventRegionVO eventRegionVO) {
		if(BlankUtil.isBlank(eventRegionVO)){
			return null;
		}
		this.checkEventRegionByName(eventRegionVO.getName(), null);
		EventRegionDO eventRegionDO = this.assembleV2D(eventRegionVO, null);
		eventRegionDO = eventRegionDao.saveObject(eventRegionDO);
		eventRegionVO.setKeyword(eventRegionDO.getKeyword());
		return eventRegionVO;
	}
	/**
	 * 方法描述: 区域设置删除方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param EventRegionVO
	 * @return EventRegionVO Edit author: Edit on: 修改原因：
	 */
	public boolean deleteEventRegion(Long eventRegionId) {
		if(BlankUtil.isBlank(eventRegionId)){
			return false;
		}
		try {
			eventRegionDao.deleteObjectById(eventRegionId);
		} catch (RuntimeException e) {
			e.printStackTrace();
			throw new BusinessException(
					"custservice:system_delete_inused_exception",
					BusinessException.WARNING);
		}
		return true;
	}
	/**
	 * 方法描述: 区域设置修改方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param EventRegionVO
	 * @return EventRegionVO Edit author: Edit on: 修改原因：
	 */
	public EventRegionVO editEventRegion(EventRegionVO eventRegionVO) {
		if(BlankUtil.isBlank(eventRegionVO)){
			return null;
		}
		this.checkEventRegionByName(eventRegionVO.getName(), eventRegionVO.getKeyword());
		EventRegionDO eventRegionDO = this.assembleV2D(eventRegionVO, null);
		EventRegionDO oldEventRegionDO = eventRegionDao.findById(eventRegionVO.getKeyword());
		if(BlankUtil.isBlank(oldEventRegionDO)){
			return null;
		}
		modifyInfo(oldEventRegionDO.getSysInfo(), eventRegionVO.getModifier());
		BeanUtil.convertVoAsDo(eventRegionDO, oldEventRegionDO);
		return eventRegionVO;
	}
	/**
	 * 功能描述:校验区域设置名字是否存在<br>
	 * 注：新建判断name的唯一性时，oldId传为null；修改判断name的唯一性时，则需要传入本身的ID<br>
	 * @param name
	 * @param id
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-18
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public void checkEventRegionByName(String name,Long id){
		Long count = eventRegionDao.countEventRegionByName(name, id);
		if(count > 0){
			throw new BusinessException(
					"custservice:system_name_exist_exception",
					BusinessException.WARNING);
		}
	}

	/**
	 * 方法描述: EventRegionVO To EventRegionDO
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param eventRegionVO
	 * @param eventRegionDO
	 * @return eventRegionDO
	 */
	private EventRegionDO assembleV2D(EventRegionVO eventRegionVO, EventRegionDO eventRegionDO) {
		if(BlankUtil.isBlank(eventRegionDO)){
			eventRegionDO = new EventRegionDO();
		}
		BeanUtil.convertVoAsDo(eventRegionVO, eventRegionDO);
		if(!BlankUtil.isBlank(eventRegionVO.getCreator())){
			eventRegionDO.setSysInfo(createInfo(eventRegionVO.getCreator()));
		}
		return eventRegionDO;
	}

	/**
	 * 方法描述: EventRegionDO To EventRegionVO
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param eventRegionDO
	 * @param eventRegionVO
	 * @return EventRegionVO
	 */
	private EventRegionVO assembleD2V(EventRegionDO eventRegionDO, EventRegionVO eventRegionVO) {
		if(BlankUtil.isBlank(eventRegionVO)){
			eventRegionVO = new EventRegionVO();
		}
		PopulateUtil.populate(eventRegionDO, eventRegionVO);
		return eventRegionVO;
	}

	private IEventRegionDao eventRegionDao;

	/**
	 * @param eventRegionDao the eventRegionDao to set
	 */
	public void setEventRegionDao(IEventRegionDao eventRegionDao) {
		this.eventRegionDao = eventRegionDao;
	}
}
